// TencentWordDao.ts
import type { WordRecord } from "../../types/WordResponse";
import type { WordDao } from "./WordDao";
import apiClient from '../../utils/appHttp';

export class TencentWordDao implements WordDao {
 
  /**
   * 获取所有单词记录
   * @returns 单词记录数组
   */
  async getAllWords(param:Object): Promise<WordRecord[]> {
    try {
      // 由于后端接口支持分页，我们需要获取所有数据
      // 这里先获取第一页，并设置较大的limit以减少请求次数
      const response = await apiClient.get(`/word`, {
        params: param
      });

      if (response.data.code === 0) {
        return response.data.data.words || [];
      } else {
        throw new Error(response.data.message || '获取单词列表失败');
      }
    } catch (error) {
      console.error('获取单词列表失败:', error);
      throw error;
    }
  }

  /**
   * 添加或更新单词记录
   * @param word 单词记录
   * @returns Promise<void>
   */
  async addOrUpdateWord(word: WordRecord): Promise<void> {
    try {
      const response = await apiClient.post(`/word`, word);

      if (response.data.code !== 0) {
        throw new Error(response.data.message || '操作单词失败');
      }
    } catch (error) {
      console.error('操作单词失败:', error);
      throw error;
    }
  }

  /**
   * 获取分类列表
   * 注意：根据现有接口信息，这个功能可能需要后端额外支持
   * 这里提供一个基础实现
   * @returns 分类列表
   */
  async getCategoryList(): Promise<string[]> {
    try {
      // 如果后端有专门的分类接口，可以调用该接口
      // 否则可以从单词列表中提取唯一分类
      const words = await this.getAllWords({});
      const categories = words
        .map(word => (word as any).category) // 假设category字段存在
        .filter((category, index, arr) => category && arr.indexOf(category) === index) as string[];

      return categories;
    } catch (error) {
      console.error('获取分类列表失败:', error);
      throw error;
    }
  }

  /**
   * 添加分类
   * 注意：根据现有接口信息，这个功能可能需要后端额外支持
   * 这里提供一个基础实现
   * @param category 分类名称
   * @returns 是否添加成功
   */
  async addCategoryList(_: string): Promise<boolean> {
    try {
      // 这个功能可能需要后端提供专门的分类管理接口
      // 目前的实现只是示例，实际可能需要调整
      console.warn('添加分类功能需要后端专门支持，当前为示例实现');
      return true;
    } catch (error) {
      console.error('添加分类失败:', error);
      return false;
    }
  }
}
